package com.jzo2o.customer.controller.consumer;

import com.jzo2o.common.expcetions.ForbiddenOperationException;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.customer.enums.AddressDefaultStatusEnum;
import com.jzo2o.customer.model.domain.AddressBook;
import com.jzo2o.customer.model.dto.request.AddressBookPageQueryReqDTO;
import com.jzo2o.customer.model.dto.request.AddressBookUpsertReqDTO;
import com.jzo2o.customer.service.IAddressBookService;
import com.jzo2o.mvc.model.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;

/**
 * 地址薄相关接口
 */
@RestController("consumerAddressBookController")
@RequestMapping("/consumer/address-book")
@Api(tags = "用户端 - 地址薄相关接口")
public class AddressBookController {
    @Resource
    private IAddressBookService addressBookService;

    /**
     * 新增地址信息
     */
    @PostMapping("")
    @ApiOperation("新增地址信息")
    public void add(@RequestBody AddressBookUpsertReqDTO addressBookUpsertReqDTO) {
        // 新增一个地址薄
        addressBookService.insert(addressBookUpsertReqDTO);
    }

    /**
     * 分页查询地址信息
     */
    @GetMapping("/page")
    @ApiOperation("分页查询地址信息")
    public PageResult<AddressBook> page(AddressBookPageQueryReqDTO addressBookPageQueryReqDTO) {
        return addressBookService.page(addressBookPageQueryReqDTO);
    }

    /**
     * 地址薄详情---修改地址簿前调用此接口先查询在页面显示
     */
    @GetMapping("/{id}")
    @ApiOperation("地址薄详情")
    public AddressBook detail(@PathVariable Long id) {
        return addressBookService.getById(id);
    }

    /**
     * 修改地址---更改指定id的地址信息
     */
    @PutMapping("/{id}")
    @ApiOperation("修改地址")
    public void update(@PathVariable Long id,
                       @RequestBody AddressBookUpsertReqDTO addressBookUpsertReqDTO) {
        // 修改一个地址薄
        addressBookService.updateById(id, addressBookUpsertReqDTO);
    }

    /**
     * 批量删除地址（逻辑删除）
     */
    @DeleteMapping("/batch")
    @ApiOperation("批量删除地址（逻辑删除）")
    public void deleteBatch(@RequestBody List<Long> ids) {
        addressBookService.removeByIds(ids);
    }

    /**
     * 设置/取消默认地址
     */
    @PutMapping("/default")
    @ApiOperation("设置/取消默认地址")
    public void updateDefault(@RequestParam Long id, @RequestParam int flag) {
        // 0取消默认 1设为默认，如果是非0或1则拒绝请求
//        if (flag != AddressDefaultStatusEnum.DEFAULT.getStatus()
//                && flag != AddressDefaultStatusEnum.NONE_DEFAULT.getStatus()) {
//            throw new ForbiddenOperationException("设置的参数有误-拒绝请求");
//        }
        addressBookService.updateDefault(id, flag);
    }

    /**
     * 获取当前用户的默认地址
     */
    @GetMapping("/defaultAddress")
    @ApiOperation("获取当前用户的默认地址")
    public AddressBook getDefaultAddress() {
        return addressBookService.getDefaultAddress();
    }


}
